package com.xudm.cdg.controller;

import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.LocalDateTimeUtil;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.databind.JsonNode;
import com.xudm.cdg.api.TyqwApi;
import com.xudm.cdg.utils.MarkdownUtil;
import jakarta.annotation.Resource;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.OutputStream;

@RestController
@RequestMapping("/dataDict")
@Slf4j
public class DataDictController {
    @Resource
    private TyqwApi qwApi;
    // 提示信息
    public static final String JOSN_IMG_PROMPT = "你将收到一段用逗号或者顿号分隔的文本，你需要做的是把这些文本分割以后的词汇翻译成英文，多个单词使用小驼峰连接，然后给出符合这个变量的案例值，案例值可以包含中文。以此为基础组装成json对象，json对象的key是变量名，value是案例值。变量名不能含有中文，输出的时候只需要输出json对象即可。";
    public static final String DICT_TABLE_PROMPT = "你将收到一段用逗号或者顿号分隔的文本，你需要做的是把这些文本分割以后的词汇翻译成英文，多个单词使用小驼峰连接，然后给出变量如果作为mysql数据库表的字段，应该要用什么数据类型、长度、非空等，非空以0或者1表示，并以markdown表格的形式输出，表头为字段名、别名、类型、长度、非空，只返回markdown格式的表格，不需要多余的描述。";


    @RequestMapping("/getDataDictJsonImg")
    public void getDataDictJsonImg(String dataAttr, HttpServletResponse response) {
        JSONObject jsonObject = qwApi.chatByQw(dataAttr, JOSN_IMG_PROMPT);
        String result = "";
        JSONArray jsonArray = jsonObject.getJSONObject("output").getJSONArray("choices");
        JSONObject json = (JSONObject) jsonArray.get(0);
        result = json.getJSONObject("message").getString("content");
        String jsonText = MarkdownUtil.extractJsonFromMarkdown(result);
        // 设置响应的内容类型为图像格式
        response.setContentType("image/png");
        response.setCharacterEncoding("utf-8");
        String fileName = "data_dict_json_img_" + LocalDateTimeUtil.format(LocalDateTimeUtil.now(), DatePattern.PURE_DATETIME_PATTERN);
        response.setHeader("Content-Disposition", "attachment;filename*=utf-8''" + fileName + ".png");
        // 从markdown中提取的json字符串
        if (jsonText != null) {
            try {
                JsonNode jsonData = null;
                jsonData = MarkdownUtil.parseJson(jsonText);
                String jsonString = jsonData.toPrettyString();
                BufferedImage image = MarkdownUtil.renderJsonToImage(jsonString);
                try (OutputStream outputStream = response.getOutputStream()) {
                    ImageIO.write(image, "png", outputStream);
                }
            } catch (Exception e) {
                log.error("Failed to render JSON to image.", e);
            }
        } else {
            log.info("No JSON data found in the Markdown text.");
        }
    }

}
